package com.takepoints.mobile;

import java.net.URL;

import com.facebook.android.Facebook;
import com.facebook.android.SessionStore;
import com.takepoints.android.bo.MemberProfile;
import com.takepoints.android.TPConst;
import com.takepoints.android.services.SecurityServices;

import android.annotation.TargetApi;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.widget.ImageView;
import android.widget.TextView;

public class MyProfile extends BaseActivity {
	
	private Facebook facebook;

    private Handler handler;
    private ImageView imgMember;
    
    private TextView lblHeader = null;
    private TextView txtMemberName = null;
    
	@Override
    public void onCreate(Bundle savedInstanceState){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) {
			StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
	        .detectDiskReads()
	        .detectDiskWrites()
	        .detectNetwork()   // or .detectAll() for all detectable problems
	        .penaltyLog()
	        .build());
			StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
	        .detectLeakedSqlLiteObjects()
	        .penaltyLog()
	        .penaltyDeath()
	        .build());
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myprofile);
        manageMenu(0);
        
        new LoadProfile(this).execute();
        
		facebook = new Facebook("260050780743981");
        handler = new Handler();
                
        lblHeader = (TextView) findViewById(R.id.lblHeader);
        txtMemberName = (TextView) findViewById(R.id.txtMemberName);
        imgMember = (ImageView) findViewById(R.id.imgMember);
    	try {
	        SessionStore.restore(facebook, MyProfile.this);
	        if(facebook.isSessionValid()){
	        	String email = SessionStore.getEmail(MyProfile.this);
	        	String name = SessionStore.getName(MyProfile.this);
	        	if(email != null){
	        		txtMemberName.setText(email);
	        	}
	        	if(name != null){
	        		lblHeader.setText(name);
	        	}
	        	
	        	String fbId = SessionStore.getFbId(MyProfile.this);
	        	if(fbId != null){
	        		URL imgUrl = new URL("https://graph.facebook.com/" + fbId + "/picture");
					Bitmap imgFB = BitmapFactory.decodeStream(imgUrl.openConnection().getInputStream());
	            	imgMember.setImageBitmap(imgFB);
	        	}
	        } else{
	        	String prefUsrname = getSharedStringValue(TPConst.PRF_USRNAME);
	        	if(prefUsrname != null && prefUsrname.trim().length() > 0){
	        		txtMemberName.setText(prefUsrname);
	        	}
	        }
    	} catch (Exception e) {
    		popup(e.getMessage());
    	}
	}
	
	class LoadProfile extends AsyncTask<Void, Void, MemberProfile>{
    	
		private Context context = null;
		private ProgressDialog progressDlg = null;
		
		LoadProfile(Context context){
			this.context = context;
		}
		
        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            progressDlg = ProgressDialog.show(context, "Takepoints.com", "กำลังโหลด แฟ้มประวัติ ...", true);
        }
        
        @Override
        protected MemberProfile doInBackground(Void... params){
        	return SecurityServices.getMyInfo(getSharedIntValue(TPConst.PRF_MEMBER_ID));
        }
        
        @Override
        protected void onPostExecute(MemberProfile profile){
        	if(profile != null){
    			TextView txtMemSince = (TextView)findViewById(R.id.txtMemSince);
    			TextView txtRedeem = (TextView)findViewById(R.id.txtRedeem);
    	        TextView txtPending = (TextView)findViewById(R.id.txtPending);
    	
    	        txtMemSince.setText("เป็นสมาชิกเมื่อ   " + profile.getSince());
    	        txtRedeem.setText("แต้มที่สามารถ\nใช้แลกได้\n\n" + profile.getRedeemPoint());
    	        txtPending.setText("แต้มที่รอการยืนยัน\nจากร้านค้า\n\n" + profile.getPendingPoint());
    		}
        	progressDlg.dismiss();
        }
    }
	
/*
	private Drawable getPictureForFacebookId(String facebookId) {
	    Drawable picture = null;
	    InputStream inputStream = null;
	    try {
	        inputStream = new URL("https://graph.facebook.com/" + facebookId + "/picture").openStream();
	    } catch (Exception e) {        
	     e.printStackTrace();
	     return null;
	    }
	    picture = Drawable.createFromStream(inputStream, "facebook-pictures");

	    return picture;
	}
	
    public class UserRequestListener implements RequestListener {
        @Override
        public void onComplete(final String response, final Object state) {
            JSONObject jsonObject;
            try {
                // สร้าง jsonObject จากค่าสตริงที่เฟซบุ๊คส่งกลับมาให้
                jsonObject = new JSONObject(response);
                // อ่านชื่อของผู้ใช้ และ URL ของรูปโปรไฟล์มาเก็บลงตัวแปร
                final String name = jsonObject.getString("name");
                final String picURL = jsonObject.getString("picture");
                // สร้างเธรดใหม่สำหรับอ่านข้อมูลรูปภาพจาก URL เนื่องจากแอนดรอยด์ตั้งแต่เวอร์ชั่น 3 
                // ขึ้นไป จะไม่อนุญาตให้โค้ดในเธรดหลัก (UI thread) เข้าถึงเน็ตเวิร์กได้ ทั้งนี้เพื่อ
                // ป้องกันปัญหา "แอพไม่ตอบสนอง" (Application Not Responding)
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        	// อ่านข้อมูลรูปภาพจาก URL
                        	final Bitmap bitmap = CustomUtil.getBitmap(picURL);
                        	// แสดงชื่อและรูปโปรไฟล์ออกมาบนหน้าจอ (สาเหตุที่ต้องใช้ 
                        	// Handler.post(Runnable) เพราะแอนดรอยด์กำหนดว่าการทำงานกับ 
                        	// UI ต้องทำในเธรดหลักเท่านั้น ซึ่ง Handler.post(Runnable) เป็นวิธี
                        	// ที่ช่วยให้เรารันโค้ดในเธรดหลักได้)
                        	handler.post(new Runnable() {
	                            @Override
	                            public void run() {
	                            	imgMember.setImageBitmap(bitmap);
	                            }
	                        });   
                    }
                }).start();                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onFacebookError(FacebookError e, Object state) {}
        @Override
        public void onIOException(IOException e, Object state) {}
        @Override
        public void onFileNotFoundException(FileNotFoundException e, Object state) {}
        @Override
        public void onMalformedURLException(MalformedURLException e, Object state) {}
    }
*/
}
